package com.flow.asyncflow.core.entity.core;

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @description: 实体基类
 * @author: lgq07612
 * @create: 2020-08-08 11:12
 **/
@Data
public class BaseEntity<T> {
    @TableField(exist = false)
    public Map<String, Object> changeValues;


    public BaseEntity() {
        changeValues = new HashMap<>();
    }

    /**
     * @param col    属性名称
     * @param newval 新值
     * @param oldval 老的值
     */
    protected void ChangeStack(String col, Object newval, Object oldval) {

        //新的不能为null,不允许将属性更新为null
        //老的不能为null,老的是null时，当前实体肯定是new出来的要进行插入的，直接走反射去拿变化的属性
        if (newval == null || oldval == null) {
            return;
        }

        if (newval.equals(oldval)) {
            return;
        }
        //不存在这个字段 或者 存在并且不相等(改变了)
        if (!changeValues.containsKey(col) || !changeValues.get(col).equals(newval)) {
            changeValues.put(col, newval);
        }


    }
}
